﻿// 4226. 非常可乐.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <unordered_map>
#include <queue>


using namespace std;
/*
https://www.acwing.com/problem/content/4229/

大家一定觉的运动以后喝可乐是一件很惬意的事情，但是 seeyou 却不这么认为。

因为每次当 seeyou 买了可乐以后，阿牛就要求和 seeyou 一起分享这一瓶可乐，而且一定要喝的和 seeyou 一样多。

但 seeyou 的手中只有两个杯子，它们的容量分别是 N
 毫升和 M
 毫升。

可乐的体积为 S
 （S<101）毫升　(正好装满一瓶) ，它们三个之间可以相互倒可乐 (都是没有刻度的，且 S=N+M，101＞S＞0，N＞0，M＞0
) 。

聪明的 ACMER 你们说他们能平分吗？

如果能请输出倒可乐的最少的次数，如果不能输出 NO。

输入格式
输入包含多组测试数据。

每组数据一行，三个整数 S,N,M
。

当输入一行为 0 0 0 时，表示输入结束。

输出格式
每组数据输出一行结果，如果能够平分，则输出倒可乐的最少的次数，否则输出 NO。

数据范围
S=N+M，101＞S＞0，N＞0，M＞0
)

输入样例：
7 4 3
4 1 3
0 0 0
输出样例：
NO
3
*/

int S, N, M;
int s, n, m;
int limit[3];
unordered_map<long long,int> statess;
queue<vector<int> > q;

void AtoB(int a, int b,int arr[] ,int step) {
	int minop = min(arr[a], limit[b] - arr[b]);
	arr[a] -= minop; arr[b] += minop;
	if (statess.count(arr[0] + arr[1] * 1000 + arr[2] * 1000000) == 0) {
		statess[arr[0] + arr[1] * 1000 + arr[2] * 1000000] = step + 1;
		q.push({arr[0],arr[1],arr[2]});
	}

	arr[a] += minop; arr[b] -= minop;
}

void solve() {
	long long hashV = S + 0 * 1000 + 0 * 1000000;
	
	q.push({ S,0,0 });
	statess[hashV] = 0;;

	if (S % 2 != 0) {
		cout << "NO" << endl; return;
	}

	while (!q.empty()) {
		int arr[3];
		arr[0] = q.front()[0]; arr[1] = q.front()[1]; arr[2] = q.front()[2];
		q.pop();
		int step = statess[arr[0] + arr[1] * 1000 + arr[2] * 1000000];

		//cout << "step = "<< step<<" :"<<arr[0] << " " << arr[1] << " " << arr[2]  << endl;

		int cnt = 0;
		for (int i = 0; i < 3; i++) {
			if (arr[i] == S / 2) cnt++;
		}

		if (cnt >=2) {
			cout << step << endl; return;
		}

		//a到b
		if (arr[0] != 0) {
			AtoB(0, 1, arr, step);
		}

		//a到c
		if (arr[0] != 0) {
			AtoB(0, 2, arr,step);
		}

		//b到c
		if (arr[1] != 0) {
			AtoB(1, 2, arr, step);
		}

		//b到a
		if (arr[1] != 0) {
			AtoB(1, 0, arr, step);
		}

		//c到a
		if (arr[2] != 0) {
			AtoB(2, 0, arr, step);
		}

		//c到b
		if (arr[2] != 0) {
			AtoB(2, 1, arr, step);
		}
	}

	cout << "NO" << endl; return;
}

int main()
{
	while (cin >> S >> N >> M) {
		if (S == 0 && N == 0 && M == 0) break;
		while (!q.empty()) q.pop();
		statess.clear();
		limit[0] = S; ; limit[1] = N; limit[2] = M;
		solve();
	}
}

 